package com.starbugs.wehcat.pojo;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import lombok.Data;

import java.util.Date;
import java.util.List;

// @Data Equivalent to @Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode

// @RequiredArgsConstructor Generates a constructor with required arguments.
// Required arguments are final fields and fields with constraints such as @NonNul

/**
 * @author starbooks
 */
@Data
public class Taco {

  /**
   * 注解 @GeneratedValue 存在的意义主要就是为一个实体生成一个唯一标识的主键
   *
   * strategy属性的选项
   *
   * - AUTO主键由程序控制, 是默认选项 ,不设置就是这个
   *
   * - IDENTITY 主键由数据库生成, 采用数据库自增长, Oracle不支持这种方式
   *
   * - SEQUENCE 通过数据库的序列产生主键, MYSQL  不支持
   *
   * - Table 提供特定的数据库产生主键, 该方式更有利于数据库的移植
   */
  private long id;

  private Date createAt;

  @NotNull
  @Size(min=5, message="Name must be at least 5 characters long")
  private String name;

  /**
   *  注解 @ManyToMany 表示此类是多对多关系的一边，mappedBy 属性定义了此类为双向关系的维护端
   */
  @Size(min=1, message="You must choose at least 1 ingredient")
  private List<Ingredient> ingredients;
}
